package main

import (
	"github.com/gin-gonic/gin"
)

func BookRouterInit(r *gin.Engine) {
	r.Static("/web", "./web")
	r.POST("/book/create", CreateBookApi) // 创建书籍
	r.GET("/book/get", GetBookApi)        // 获取书籍
	r.POST("/book/update", UpdateBooApi)  // 更新书籍
	r.GET("/book/delete", DeleteBookApi)  // 删除书籍
	r.GET("/book/list", GetAllBookApi)    // 获取用户的所有书籍
}

// 创建书籍
func CreateBookApi(c *gin.Context) {
	var book Book
	err := c.ShouldBindJSON(&book)
	if err != nil {
		Error(c, 1, err.Error())
		return
	}
	err = CreateBook(&book)
	if err != nil {
		Error(c, 1, err.Error())
		return
	}
	Success(c, book)
}

// 获取书籍
func GetBookApi(c *gin.Context) {
	// id := c.GetString("user_id")
	id := c.Query("id")
	book, err := GetBook(id)
	if err != nil {
		Error(c, 1, "Book not found")
		return
	}

	Success(c, book)
}

// 更新书籍
func UpdateBooApi(c *gin.Context) {

	var updateData map[string]interface{}
	if err := c.ShouldBindJSON(&updateData); err != nil {
		Error(c, 1, err.Error())
		return
	}
	id, ok := updateData["id"].(string)
	if !ok {
		Error(c, 1, "Invalid book ID")
		return
	}
	err := UpdateBook(id, updateData)
	if err != nil {
		Error(c, 1, "Update failed")
		return
	}

	Success(c, gin.H{"id": id})
}

// 删除书籍
func DeleteBookApi(c *gin.Context) {
	//get book id from request
	id := c.Query("id")
	err := DeleteBook(id)
	if err != nil {
		Error(c, 1, err.Error())
		return
	}
	Ok(c)
}

// 获取用户的所有书籍
func GetAllBookApi(c *gin.Context) {

	books, err := GetAllBook()
	if err != nil {
		Error(c, 1, "Failed to get books")
		return
	}

	Success(c, books)
}
